Security News
Node.js EOL Versions CVE Dubbed the "Worst CVE of the Year" by Security Experts
Critics call the Node.js EOL CVE a misuse of the system, sparking debate over CVE standards and the growing noise in vulnerability databases.
i18next-xhr-backend
Advanced tools
The i18next-xhr-backend package is a backend layer for the i18next internationalization framework, which allows you to load translations from a server using XMLHttpRequest (XHR). This is particularly useful for dynamic loading of translations in web applications.
Loading translations from a server
This feature allows you to load translation files from a server. The `loadPath` option specifies the path to the translation files, which can include placeholders for the language (`{{lng}}`) and namespace (`{{ns}}`).
const i18next = require('i18next');
const XHR = require('i18next-xhr-backend');
i18next
.use(XHR)
.init({
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json'
}
}, function(err, t) {
if (err) return console.error(err);
console.log('i18next is ready...');
});
Customizing XHR settings
This feature allows you to customize the XHR settings, such as using the Fetch API instead of the default XMLHttpRequest. The `ajax` function can be overridden to provide custom behavior for loading translation files.
const i18next = require('i18next');
const XHR = require('i18next-xhr-backend');
i18next
.use(XHR)
.init({
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json',
ajax: function (url, options, callback, data) {
// Custom AJAX request
fetch(url, options)
.then(response => response.json())
.then(data => callback(data, { status: '200' }))
.catch(error => callback(null, { status: '500' }));
}
}
});
Caching translations
This feature allows you to cache translations in localStorage to reduce the number of requests to the server. The `cache` option can be configured to enable caching and set a key prefix for the cached translations.
const i18next = require('i18next');
const XHR = require('i18next-xhr-backend');
const Cache = require('i18next-localstorage-cache');
i18next
.use(XHR)
.use(Cache)
.init({
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json'
},
cache: {
enabled: true,
prefix: 'i18next_res_' // Key prefix for localStorage
}
});
The i18next-http-backend package is another backend layer for i18next that uses the Fetch API to load translations from a server. It is similar to i18next-xhr-backend but uses modern Fetch API instead of XMLHttpRequest, providing better support for modern browsers and environments.
The i18next-localstorage-backend package allows you to load translations from localStorage. This is useful for offline applications or scenarios where you want to avoid making network requests for translations. It differs from i18next-xhr-backend by focusing on localStorage as the source of translations.
The i18next-fs-backend package is designed for Node.js environments and allows you to load translations from the file system. This is useful for server-side rendering or Node.js applications. It differs from i18next-xhr-backend by focusing on file system access rather than network requests.
This is a simple i18next backend to be used in the browser. It will load resources from a backend server using xhr.
Source can be loaded via npm, bower or downloaded from this repo.
# npm package
$ npm install i18next-xhr-backend
# bower
$ bower install i18next-xhr-backend
Wiring up:
import i18next from 'i18next';
import XHR from 'i18next-xhr-backend';
i18next
.use(XHR)
.init(i18nextOptions);
window.i18nextXHRBackend
{
// path where resources get loaded from, or a function
// returning a path:
// function(lngs, namespaces) { return customPath; }
// the returned path will interpolate lng, ns if provided like giving a static path
loadPath: '/locales/{{lng}}/{{ns}}.json',
// path to post missing resources
addPath: 'locales/add/{{lng}}/{{ns}}',
// your backend server supports multiloading
// /locales/resources.json?lng=de+en&ns=ns1+ns2
allowMultiLoading: false, // set loadPath: '/locales/resources.json?lng={{lng}}&ns={{ns}}' to adapt to multiLoading
// parse data after it has been fetched
// in example use https://www.npmjs.com/package/json5
// here it removes the letter a from the json (bad idea)
parse: function(data) { return data.replace(/a/g, ''); },
// allow cross domain requests
crossDomain: false,
// allow credentials on cross domain requests
withCredentials: false,
// define a custom xhr function
// can be used to support XDomainRequest in IE 8 and 9
ajax: function (url, options, callback, data) {},
// adds parameters to resource URL. 'example.com' -> 'example.com?v=1.3.5'
queryStringParams: { v: '1.3.5' }
}
Options can be passed in:
preferred - by setting options.backend in i18next.init:
import i18next from 'i18next';
import XHR from 'i18next-xhr-backend';
i18next
.use(XHR)
.init({
backend: options
});
on construction:
import XHR from 'i18next-xhr-backend';
const xhr = new XHR(null, options);
via calling init:
import XHR from 'i18next-xhr-backend';
const xhr = new XHR();
xhr.init(options);
To use with webpack, install bundle-loader and json-loader.
Define a custom xhr function, webpack's bundle loader will load the translations for you.
function loadLocales(url, options, callback, data) {
try {
let waitForLocale = require('bundle!./locales/'+url+'.json');
waitForLocale((locale) => {
callback(locale, {status: '200'});
})
} catch (e) {
callback(null, {status: '404'});
}
}
i18next
.use(XHR)
.init({
backend: {
loadPath: '{{lng}}',
parse: (data) => data,
ajax: loadLocales
}
}, (err, t) => {
// ...
});
Install from @types
(for TypeScript v2 and later):
npm install --save-dev @types/i18next-xhr-backend
Install from typings
:
typings install --save --global dt~i18next-xhr-backend
FAQs
backend layer for i18next using browsers xhr
The npm package i18next-xhr-backend receives a total of 110,604 weekly downloads. As such, i18next-xhr-backend popularity was classified as popular.
We found that i18next-xhr-backend demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Critics call the Node.js EOL CVE a misuse of the system, sparking debate over CVE standards and the growing noise in vulnerability databases.
Security News
cURL and Go security teams are publicly rejecting CVSS as flawed for assessing vulnerabilities and are calling for more accurate, context-aware approaches.
Security News
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.